たらいのテストtak

竹内郁雄先生のたらい回し関数というと、こういうのです。

[crayon lang=”scheme” title=”takm.scm”]
(defun tak (x y z) ; 日本語コメントのテスト
(if (<= x y) ; 引数を3つ取り、自分自身を再帰的に z ; 呼び出すのがtakと呼ばれる (tak (tak (1- x) y z) ; この関数です。 (tak (1- y) z x) ; 何度も何度も再帰的に (tak (1- z) x y)))) ; たらい回ししますが必ず終了します [/crayon] ところが、これはマッカーシーが間違えて覚えて広めてしまったものだそうで、竹内郁雄先生のオリジナルは [crayon lang="scheme" title="tak.scm"] (defun tak (x y z) ; 日本語コメントのテスト (if (<= x y) ; 引数を3つ取り、自分自身を再帰的に y ; 呼び出すのがtakと呼ばれる (tak (tak (1- x) y z) ; この関数です。 (tak (1- y) z x) ; 何度も何度も再帰的に (tak (1- z) x y)))) ; たらい回ししますが必ず終了します [/crayon] こちらだそうです。 最初のifが真のときに返す値が違います。


コメントを残す

メールアドレスは公開されません

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください